"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/5/14 9:50
@Description : 
学生信息管理系统
1. 欢迎词
******************欢迎使用学生信息管理系统********************
    1. 查看学生列表
    2. 查询学生信息
    3. 新增学生信息
    4. 修改学生信息
    5. 删除学生信息
    6. 退出系统
************************************************************
2.  业务流程说明
  2.1  程序执行则打印输出欢迎词
  2.2  提示用户选择需要使用的功能
      1  查看列表
      2  根据学号查询一个学生信息
      3. 新增学生信息   多个学生信息的录入   exit退出   学号不要重复
  2.3  每个功能使用结束后 要让用户选择是退出 还是继续    输入【y/n】继续

学生信息 ：
     1. 学号
     2. 名字
     3. 性别
     4. 年龄

数据存储 容器的选择
1. 多个学生信息存储   列表  list
2. 一个学生信息      字典   dict
"""
# 导入 prettytable模块
from prettytable import PrettyTable

# 设置欢迎词
welcome_info = """
******************欢迎使用学生信息管理系统********************
    1. 查看学生列表
    2. 查询学生信息
    3. 新增学生信息
    4. 修改学生信息
    5. 删除学生信息
    6. 退出系统
************************************************************
"""

# 定义容器存储数据
students_list = []

# 创建一个表格
table = PrettyTable(['学号', '姓名', '性别', '年龄'])
# 设置最小列宽
table.min_width = 10
while True:
    print(welcome_info)
    # 接收用户选择的功能选项
    user_choice = input('请输入功能序号:')
    # 判定用户的选择  进入不同的功能区  分支 match
    match user_choice:
        case '1':
            print('>' * 20, '查看学生列表', '<' * 20)
            # 判定容器中是否有学生信息
            if students_list:
                # 遍历学生列表容器
                for student in students_list:
                    # 添加数据行
                    table.add_row([student.get('sno'), student.get('name'), student.get('sex'), student.get('age')])
                # 打印表格
                print(table)
                # 清空表格的数据行
                table.clear_rows()
            else:
                print('没有学生信息,请添加后查看')
        case '2':
            print('>' * 20, '查询学生信息', '<' * 20)
            # 提示用户输入学号
            sno = input('请输入学号:')
            # 遍历列表  判定学号在列表中的哪个字典中 sno
            for student in students_list:
                if student.get('sno') == sno:
                    # 添加学生信息到表格
                    table.add_row([student.get('sno'), student.get('name'), student.get('sex'), student.get('age')])
                    print(table)
                    table.clear_rows()
                    break  # 找到学号相等的信息 结束循环  提升程序执行的效率
            #  判定学生信息是否找到
            else:
                print('输入的学号不存在,请重新输入!!!')
        case '3':
            print('>' * 20, '新增学生信息', '<' * 20)
            # 保证的学号的唯一性
            while True:
                sno = input('请输入学号:')
                # 遍历学生信息列表  判定学号是否存在
                for student in students_list:
                    if student.get('sno') == sno:
                        print('学号已存在，请重新输入')
                        break
                else:
                    name = input('请输入名字:')
                    age = int(input('请输入年龄:'))
                    sex = input('请输入性别:')
                    # 将用户输入的信息存储在字典中  添加到list中
                    user_input_student = {
                        'sno': sno,
                        'name': name,
                        'age': age,
                        'sex': sex
                    }
                    students_list.append(user_input_student)
                    is_continue = input("是否继续录入【y/n】:")
                    if is_continue == 'n':
                        break
            print('学生信息添加成功!!!')
        case '4':
            print('>' * 20, '修改学生信息', '<' * 20)
            stu_no = input('请输入学号:')
            for student in students_list:
                if student.get('sno') == stu_no:
                    #  进入修改阶段
                    update_name = input('修改名字【y/n】:')
                    if update_name == 'y':
                        name = input('请输入名字:')
                        student['name'] = name
                    update_age = input('修改年龄【y/n】:')
                    if update_age == 'y':
                        age = int(input('请输入年龄:'))
                        student['age'] = age
                    update_sex = input('修改性别【y/n】:')
                    if update_sex == 'y':
                        sex = input('请输入性别:')
                        student['sex'] = sex
                    print('学生信息修改成功!!!')
                    break
            else:
                print('学号不存在,修改学生信息失败!!!')
        case '5':
            print('>' * 20, '删除学生信息', '<' * 20)
            sno = input('请输入学号:')
            for student in students_list:
                if student.get('sno') == sno:
                    # 删除学生
                    students_list.remove(student)
                    print(f'学号是{sno}学生信息删除成功')
                    break
            else:
                print(f'学号是{sno}的学生不存在,删除失败!!!')
        case '6':
            print('>' * 20, '退出系统', '<' * 20)
            break
        case _:
            print('请输入正确的功能序号!!!')

    # 询问用户是否退出
    is_exit = input('是否退出系统【y/n】：')
    if is_exit == 'y':
        break
print('------程序退出,欢迎下次使用-------')
